<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpModuleGadgets extends cpModuleAdmin
{
	
	
	
	
	
	protected $themeInfos;
	protected $theme;
	
	protected $zonesGadgets;
	
	protected $htmlGadgets;
	protected $javascriptGadgets;
	protected $msgGadgetsDesactives = array();
	protected $conditionsAffichageGadgets = array();
	protected $iGadgets;

	
	
	
	
	/// @name Initialisation
	//@{
	

	public function __construct($core)
	{
	   
		parent::__construct($core); 
		
		# Permission nécessaire: gadgets
		$this->core->auth->verifierPermission('gadgets', true);
		
		# Thème
		$this->core->chargerThemes();
		
		if(!array_key_exists($_GET['theme'], $this->core->themes)) {
			http::redirect('index.php?module=apparence');
		}
		$this->themeInfos = $this->core->themeInfos = $this->core->themes[$_GET['theme']];
		$this->theme = $this->core->getObjetTheme($_GET['theme']);
		
		# Zones de gadgets
		$this->zonesGadgets = $this->theme->getZonesGadgets();
		
		# Gadgets
		$this->gadgets();
		
		# Paramètres du module d'administration
		$this->setTitreModule(sprintf(__('Gadgets pour le thème %s'), html::escapeHTML($this->themeInfos['nom'])));
		$this->setPrev('apparence', __('Apparence'));
		$this->ajouterBoutonAction(__('Enregistrer'), '#', 'boutonAction_enregistrer');
		
		# CSS et Javascript
		$this->setCSS('gadgets');
		$this->setJavascript('cpConditionsPage,gadgets');
		
	}
	//@} 
	
	

	
	
	/// @name Interface du module
	//@{
	
	
	public function gadgets()
	{
		
		$this->htmlGadgets = '';
		$this->javascriptGadgets = '';
		
		$i = 0;
		$iGadget = 0;
		
		# Zones de gadgets
		foreach($this->zonesGadgets as $zone_id => $zone_nom)
		{
			
			$i++;
			
			$this->htmlGadgets.=
			'<div class="conteneurZoneGadgets" id="conteneurZoneGadgets_'.$i.'">'.
				'<h3>'.html::escapeHTML($zone_nom).'</h3>'.
				form::hidden('ref_zone_id', $zone_id).
				'<div class="zoneGadgets" id="zoneGadgets_'.$i.'">';
			
			# Liste des gadgets pour cette zone
			$gadgets = $this->core->site->getGadgets(array(
				'theme_id' 	=> $this->themeInfos['identifiant'],
				'zone_id'	=> $zone_id
			), CP_GET_STATIC);
			
			while($gadgets->fetch())
			{
				
				$iGadget++;
				
				$gadgets->setI($iGadget);
				$adminInterface = $gadgets->adminInterface();
				
				if($adminInterface != false)
				{
					$displayConditionsAffichage = ($gadgets->gadget_inst_conditions['affichage'] == '1') ?
						'style="display:none;"' : '';
					
					$this->htmlGadgets.=
					'<div id="gadget'.$iGadget.'" class="gadget" loaded="1" gadgetI="'.$iGadget.'">'.
						'<h4 class="nomGadget">'.html::escapeHTML($gadgets->getNom()).'</h4>'.
						'<div class="contenuGadget" style="display:none;">'.
							form::hidden(array('gadgetI[]', ''), $iGadget).
							'<input type="hidden" name="zone_id['.$iGadget.']" value="'.$zone_id.'" class="zoneField"/>'.
							form::hidden('gadget_id['.$iGadget.']', $gadgets->gadget_id).
							$adminInterface['html'].
							'<fieldset class="gadgetAffichage">'.
								'<legend>'.__('Affichage').'</legend>'.
								'<p>'.
									form::combo(array('affichage['.$iGadget.']', 'affichage_'.$iGadget), array(
										__('Sur toutes les pages') => 1,
										__('Selon des conditions...') => 2
									), $gadgets->gadget_inst_conditions['affichage']).
								'</p>'.
								'<div class="conditionsPage" '.$displayConditionsAffichage.' id="gdg_'.$iGadget.'_conditionsAffichage">'.
								'</div>'.
							'</fieldset>'.
						'</div>'.
					'</div>';
							
					$this->javascriptGadgets.= $adminInterface['javascript'];
					$this->conditionsAffichageGadgets[$iGadget] = 
						'conditionsAffichageData['.$iGadget.'] = '.
						$this->core->conditionsPageToJs($gadgets->gadget_inst_conditions['conditions']);
						
				}

			}
			
			$this->htmlGadgets.=
				'</div>'.
			'</div>';
		}
		
		$this->iGadgets = $iGadget;
		
	}
	
	
	public function interfaceModule()
	{
	
		
		global $__autoload;
		
		if(count($this->zonesGadgets) == 0) {
			$this->ajouterMessageInfo(__('Ce thème ne possède pas de zone de gadgets.'));
			return $this->afficherMessages();
		}
		
		$html =
		'<form id="formulaireGadgets">'.
		'<div id="conteneurMessage"></div>'.
		form::hidden('action', 'cp-gadgets-enregistrer').
		form::hidden('theme_id', $this->themeInfos['identifiant']).
		'<div id="conteneurGadgetsDisponibles">'.
			'<h3>'.__('Gadgets disponibles').'</h3>'.
			'<div id="gadgetsDisponibles">';
		
		# Affichage des gadgets disponibles
		$i = 0;
		foreach($this->core->gadgets as $gadget)
		{
			
			$i++;
			
			if(file_exists($gadget['dossier'].'/gadget.php'))
			{
				$nomClasse = 'gadget'.path::clean($gadget['identifiant']);
				$__autoload[$nomClasse] = $gadget['dossier'].'/gadget.php';
				$peutEtreAjoute = call_user_func_array(array($nomClasse, 'adminPeutEtreAjoute'), array(&$message));
				
				if(!$peutEtreAjoute)
				{
					$this->msgGadgetsDesactives[$gadget['identifiant']] = $message;
					$desactive = ' gadgetDisponibleDesactive';
				}
				else
				{
					$desactive = '';
				}
				
				$html.=
				'<div id="gadgetDispo'.$i.'" class="gadgetDisponible'.$desactive.'" name="'.html::escapeHTML($gadget['identifiant']).'" loaded="0">'.
					'<h4 class="nomGadget">'.html::escapeHTML($gadget['nom']).'</h4>'.
					'<div class="contenuGadget">&nbsp;</div>'.
				'</div>';		
				
			}

		}
		
		$html.=
			'</div>'.
		'</div>'.
		
		# Affichage des zones de gadgets
		'<div id="zonesGadgets">'.
			$this->htmlGadgets.
			'<p>'.form::checkbox('montrerAffichage', '1', false).' '.__('Montrer les options d\'affichage').'</p>'.
		'</div>'.
		'</form>';
		
		return $html;
		
	}
	
	
	public function head()
	{	
		$js = 
		'<script type="text/javascript">
			var gadgetI = '.(integer) $this->iGadgets.';
			var conditionsAffichageData = new Array();
			'.implode($this->conditionsAffichageGadgets, ";\n").';
			var msgGadgetsDesactives = {};';
		
		foreach($this->msgGadgetsDesactives as $k => $v)
		{
			$js.=
			'msgGadgetsDesactives["'.$k.'"] = "'.addslashes($v).'";';
		}
		
		$js.=
		'$(document).ready(function() {
				'.$this->javascriptGadgets.'
			});
		</script>';
		
		return $js;
		
	}
	//@}
	
	
}

?>